#ifndef POINT_H
#define POINT_H

#include <iostream>
#include <vector>
#include <math.h>

using namespace std;

class point
{
public:
    double value = 0;
    double x = 0, y = 0;
    int indisk = 0, insquare = 0;
    /*insquare =
    0代表在方形边界内 /
    -1 表示在角落 /
    1,2,3,4分别代表左右上下边界*/
    point() {}
    point(double _x, double _y) : x(_x), y(_y) { whether_in_square(); }

    void set(double _x, double _y)
    {
        x = _x;
        y = _y;
        whether_in_square();
    }

    bool operator==(point _p)
    {
        if (fabs(_p.x - x) > 1e-12)
            return false;
        if (fabs(_p.y - y) > 1e-12)
            return false;
        return true;
    }

    double distance(point _p) // 两点之间距离
    {
        double dis_x = abs(x - _p.x);
        double dis_y = abs(y - _p.y);
        if (dis_x == 0 || dis_y == 0)
            return dis_x + dis_y;
        else
            return sqrt(pow(dis_x, 2) + pow(dis_y, 2));
    }

    void whether_in_square()
    {
        if (x > 1e-12 && x < 1 - 1e-12 && y > 1e-12 && y < 1 - 1e-12)
            insquare = 0;
        else
        {
            if (x < 1e-12 && y > 1e-12 && y < 1 - 1e-12) // left
                insquare = 1;
            else if (abs(1.0 - y) < 1e-12 && x > 1e-12 && x < 1 - 1e-12) // up
                insquare = 3;
            else if (abs(1.0 - x) < 1e-12 && y > 1e-12 && y < 1 - 1e-12) // right
                insquare = 2;
            else if (y < 1e-12 && x > 1e-12 && x < 1 - 1e-12) // bottom
                insquare = 4;
            else
                insquare = -1;
        }
    }
};

#endif